/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.objetos;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Jun
 */
public class FuncionarioMetodos {
    private Pessoa pessoa = new Pessoa();
    private Funcionario funcionario = new Funcionario();
    private Salario salario = new Salario();
    private String mensagem = "";
    private List listaSalario = new ArrayList();
    private List listaFunc = new ArrayList();
    
    private String filtro = "";
    
    
    /**
     *
     * Metodo Buscar Funcionarios
     * Pega Funcionarios do banco
     * de acordo com o filtro
     * feito na sql
    */
    
    public void buscarFuncionarios() {
        Conexao con = new Conexao();
        try {
            
            con.inicia();
            String query = "SELECT * FROM bars.pessoa NATURAL JOIN bars.funcionario  NATURAL JOIN bars.salario WHERE upper(NOME) like upper('"+filtro+"%') ORDER BY nome";
            ResultSet rs = con.executa(query);
            listaFunc.clear();
            while (rs.next()) {
                Pessoa p = new Pessoa();
                Funcionario f = new Funcionario();
                Salario s = new Salario();
                p.setCpf(Long.toString(rs.getLong("cpf")));
                p.setNome(rs.getString("nome"));
                p.setEndereco(rs.getString("endereco"));
                p.setTelefone(Long.toString(rs.getLong("tel")));
                p.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
                p.setEmail(rs.getString("email"));
                s.setSalario(Integer.toString(rs.getInt("sal")));                
                s.setCargo(rs.getString("cargo"));
                f.setIdFunc(Integer.toString(rs.getInt("idFunc")));
                f.setPessoa(p);
                f.setSalario(s);
                
                listaFunc.add(f);
            }
            
            rs.close();
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }
    
    /**
     *
     * Metodo Buscar 1 Funcionario
     * Pega 1 Funcionario do banco
     * @param id - id do funcionario selecionado
    */
    
    public void buscarFuncionarioId(String id) {
        Conexao con = new Conexao();
        try {
            
            con.inicia();
            String query = "SELECT * FROM bars.pessoa natural join bars.funcionario natural join bars.salario where idfunc = "+id;
            ResultSet rs = con.executa(query);
            while (rs.next()) {
                Pessoa p = new Pessoa();
                Funcionario f = new Funcionario();
                Salario s = new Salario();
                p.setCpf(Long.toString(rs.getLong("cpf")));
                p.setNome(rs.getString("nome"));
                p.setEndereco(rs.getString("endereco"));
                p.setTelefone(Long.toString(rs.getLong("tel")));
                p.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
                p.setEmail(rs.getString("email"));            
                s.setCargo(rs.getString("cargo"));
                f.setIdFunc(Integer.toString(rs.getInt("idFunc")));
                f.setPessoa(p);
                f.setSalario(s);
                
                setFuncionario(f);
            }
            
            rs.close();
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }
    /**
     *
     * Metodo Buscar Funcionario Cargo
     * Pega Funcionarios do banco com filtro de cargo
     * @param id - id do funcionario selecionado
    */
    
    public void buscarFuncionarioCargo() {
        Conexao con = new Conexao();
        try {
            
            con.inicia();
            if(filtro.equals("all")){
                filtro="";
            }
            String query = "SELECT * FROM bars.pessoa natural join bars.funcionario natural join bars.salario where cargo like '%"+filtro+"%'";
            ResultSet rs = con.executa(query);
            listaFunc.clear();
            while (rs.next()) {
                Pessoa p = new Pessoa();
                Funcionario f = new Funcionario();
                Salario s = new Salario();
                p.setCpf(Long.toString(rs.getLong("cpf")));
                p.setNome(rs.getString("nome"));
                p.setEndereco(rs.getString("endereco"));
                p.setTelefone(Long.toString(rs.getLong("tel")));
                p.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
                p.setEmail(rs.getString("email"));
                s.setSalario(Integer.toString(rs.getInt("sal")));                
                s.setCargo(rs.getString("cargo"));
                f.setIdFunc(Integer.toString(rs.getInt("idFunc")));
                f.setPessoa(p);
                f.setSalario(s);
                
                listaFunc.add(f);
            }
            
            rs.close();
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }

    /**
     *
     * Metodo Buscar Funcionarios
     * Cadastra novo funcionario no banco
    */
    
    
    public void cadastrarFuncionario() {
        Conexao con = new Conexao();
        try {
            con.inicia();
            String query = "INSERT INTO bars.pessoa (cpf,nome,endereco,tel,email)"
            +"VALUES(" + pessoa.getCpf() + ",'" + pessoa.getNome() + "','" + pessoa.getEndereco()
            +"','" + pessoa.getTelefone() + "','" + pessoa.getEmail()+ "');";
            con.atualiza(query);
            String query3 = "SELECT idpessoa,cpf FROM bars.pessoa WHERE cpf = " + pessoa.getCpf();
            ResultSet rs = con.executa(query3);
            rs.next();
            pessoa.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
            String query2 = "INSERT INTO bars.funcionario values( 1, " + pessoa.getIdPessoa() + ",'"
                    + salario.getCargo() + "');";
            con.atualiza(query2);
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }
    
    
    /**
     *
     * Metodo Editar Funcionarios
     * Atualiza funcionario existente no banco
    */
    
    public void editarFuncionario() {
        Conexao con = new Conexao();
        try {
            con.inicia();
            String query = "UPDATE bars.pessoa"
                    +" SET cpf = "+pessoa.getCpf() + ", nome = '"+pessoa.getNome() +"', endereco = '"+ pessoa.getEndereco()
                    +"', tel = "+ pessoa.getTelefone() +",email = '"+ pessoa.getEmail()+"'"
                    +" WHERE idpessoa = "+pessoa.getIdPessoa();
            String query3 = "SELECT * FROM bars.funcionario WHERE idpessoa = " + pessoa.getIdPessoa();
                ResultSet rs = con.executa(query3);
                rs.next();
                    funcionario.setIdFunc(Integer.toString(rs.getInt("idFunc")));
            String query2 = "UPDATE bars.funcionario"
                    + " SET cargo = '" + salario.getCargo() +"'"
                    + " WHERE idFunc = " + funcionario.getIdFunc();
            con.atualiza(query);
            con.atualiza(query2);
            
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }
    
    /**
     *
     * Metodo Remover Funcionarios
     * Remove funcionario existente no banco
    */
    
    public void removerFuncionario() {
        Conexao con = new Conexao();
        try {
            con.inicia();
            String query3 = "SELECT idpessoa FROM bars.funcionario WHERE idfunc = " + funcionario.getIdFunc();
            ResultSet rs = con.executa(query3);
            rs.next();
            pessoa.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
            String query = "DELETE FROM bars.funcionario"
                    +" WHERE idfunc = "+funcionario.getIdFunc();
            String query2 = "DELETE FROM bars.pessoa"
                    +" WHERE idpessoa = "+pessoa.getIdPessoa();            
            con.atualiza(query);
            con.atualiza(query2);
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }

    /**
     *
     * Metodo Buscar Cargos
     * Busca cargos da tabela salario
     * e os coloca em uma lista
    */

    public void buscarCargos() {
        Conexao con = new Conexao();
        try {
            
            con.inicia();
            String query = "SELECT cargo FROM bars.salario ORDER BY cargo";
            ResultSet rs = con.executa(query);
            listaSalario.clear();
            while (rs.next()) {
                Salario s = new Salario();               
                s.setCargo(rs.getString("cargo"));
                if(!s.getCargo().equals(funcionario.getSalario().getCargo()))
                    listaSalario.add(s);
            }
            
            rs.close();
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }
    
    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public Funcionario getFuncionario() {
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public List getListaFunc() {
        return listaFunc;
    }

    public void setListaFunc(List listaFunc) {
        this.listaFunc = listaFunc;
    }


    public String getFiltro() {
        return filtro;
    }

    public void setFiltro(String filtro) {
        this.filtro = filtro;
    }

    public Salario getSalario() {
        return salario;
    }

    public void setSalario(Salario salario) {
        this.salario = salario;
    }

    public List getListaSalario() {
        return listaSalario;
    }

    public void setListaSalario(List listaSalario) {
        this.listaSalario = listaSalario;
    }
}